<?php
/* 
 * Classe para retorna de uma só vez as informações
 * do alvo pedido
 * versão: 1.1
 * Autor: Guilherme
 */

//inclui a classe de autorização de acesso OAuth
require_once('api/twitteroauth/twitteroauth.php');

//Classe Resultados
class Resultados{

    //variavel de conexao
    private $connection;

    //construtor da classe
    //cria a conexao
    function __construct($ck,$cks,$ak,$aks){
        $this->setConnection($ck,$cks,$ak,$aks);
    }

    //Métodos get e set da variável
    private function getConnection (){
        return $this->connection;
    }
    private function setConnection ($ck,$cks,$ak,$aks){
         $this->connection = new TwitterOAuth($ck,$cks,$ak,$aks);
    }

    /*Função retornaAlvo - função principal
     * recebe o screen_name do alvo e
     * faz toda a coleta de dados.
     */
    public function retornaAlvo($nomeDeUsuario){
        //recebe a conexao
        $conexao = $this->getConnection();

        /*
         * chama o método get com os parametros de users/show e array com o screen_name
         * user/show -> é o método de retornar todas as informações do alvo
         * screen_name -> é o parametro(opcional) que indica de qual usuário do twitter
         * deve-se procurar, se omitido retorna as informações do usuário autenticado.
         */
        $result = $conexao->get('users/show',array(
            'screen_name'=>$nomeDeUsuario
        ));

        /*
         * verifica se não ocasionou um erro
         * e emite uma mensagem em caso positivo
         * caso contrário cria um array contendo
         * 1º os dado alvo
         * 2º os contatos do alvo (following)
         * 3º os tweets recentes do contatos
         * e retorna o array
         */
        if(property_exists($result, 'error')){
            $retorno = "Nome de usuário não encontrado!";
            return $retorno;
        } else {
            $retorno["alvo"]=$result;
            $retorno["following"]=$this->retornaContatosAlvo($result->screen_name,NULL,"-1");
            $retorno["tweets"]=$this->retornaTweetsAlvo($result->screen_name);
            return $retorno;
        }
    }
    private function retornaContatosAlvo($nomeDeUsuario,$contatos,$cursor="-1"){
        $conexao = $this->getConnection();
        if($cursor==""){
            $result = $conexao->get('statuses/friends',array(
                 'screen_name'=> $nomeDeUsuario,
            ));
            $contatos=$result;
            return $contatos;
        }else{
            $result = $conexao->get('statuses/friends',array(
                 'screen_name'=> $nomeDeUsuario,
                 'cursor' => $cursor
            ));
            if(property_exists($result, 'error')){
                $retorno = "Não achou!";
                return $retorno;
            }else{
                if($contatos==NULL){
                    $contatos=$result->users;
                }else{
                    //$contatos[]=$result->users;
                    $contador_de_contatos_atuais = count($contatos);
                    for ($aux=1;$aux<count($result->users);$aux++){
                        $contatos[$contador_de_contatos_atuais]=$result->users[$aux];
                        $contador_de_contatos_atuais++;
                    }
                }
                if(property_exists($result, 'next_cursor')){
                        $next = number_format($result->next_cursor, 0, '.', '');
                        if($next!=0){
                            $contatos = $this->retornaContatosAlvo($nomeDeUsuario,$contatos,$next);
                            return $contatos;
                        }else
                            return $contatos;
                }else
                    return $contatos;
            }
        }
    }
    private function retornaTweetsAlvo($nomeDeUsuario){
        $conexao = $this->getConnection();
        $results=$conexao->get('statuses/user_timeline',array(
                 'screen_name'=> $nomeDeUsuario,
                 'include_rts'=>"1"
        ));
        return $results;
    }
}
?>
